﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media.Animation;
using SlimDX.Direct3D10;

namespace System.Windows.Media.Media3D10
{
    /// <summary>
    /// Les classes qui dérivent de cette classe de base abstraite définissent des formes géométriques 3D.
    /// La classe d'objets <see cref="Geometry3D10"/> peut être utilisée pour le test d'atteinte et pour le rendu des données graphiques 3D.
    /// </summary>
    public abstract class Geometry3D10 : Animatable
    {
        /// <summary>
        /// Crée un clone modifiable de ce <see cref="Geometry3D10"/>, en créant des copies complètes des valeurs de cet objet.
        /// Lors de la copie de propriétés de dépendance, cette méthode copie les références de ressources et les liaisons de données (même si elles ne peuvent plus être résolues), mais pas les animations ni leurs valeurs actuelles.
        /// </summary>
        /// <returns>
        /// Clone modifiable de l'objet actuel.
        /// La valeur de la propriété <see cref="Freezable.IsFrozen"/> de l'objet cloné est false, même si la valeur de la propriété <see cref="Freezable.IsFrozen"/> de la source est true.
        /// </returns>
        public new Geometry3D10 Clone()
        {
            return (base.Clone() as Geometry3D10);
        }

        /// <summary>
        /// Crée un clone modifiable de ce <see cref="Geometry3D10"/>, en créant des copies complètes des valeurs actuelles de cet objet.
        /// Contrairement à leurs valeurs actuelles, les références de ressources, les liaisons de données et les animations ne sont pas copiées.
        /// </summary>
        /// <returns>
        /// Clone modifiable de l'objet actuel.
        /// La valeur de la propriété <see cref="Freezable.IsFrozen"/> de l'objet cloné est false, même si la valeur de la propriété <see cref="Freezable.IsFrozen"/> de la source est true.
        /// </returns>
        public new Geometry3D10 CloneCurrentValue()
        {
            return (base.CloneCurrentValue() as Geometry3D10);
        }

        /// <summary>
        /// Obtient un tableau de <see cref="InputElement"/> utilisables avec ce <see cref="Geometry3D10"/>
        /// </summary>
        /// <returns>Retourne les <see cref="InputElement"/> utilisables avec ce <see cref="Geometry3D10"/></returns>
        public abstract InputElement[] GetInputElements();

        /// <summary>
        /// Obtient le <see cref="VertexBufferBinding"/> par défaut de ce <see cref="Geometry3D10"/>
        /// </summary>
        /// <returns>Retourne le <see cref="VertexBufferBinding"/> par défaut de ce <see cref="Geometry3D10"/></returns>
        public abstract VertexBufferBinding[] GetVertexBufferBinding();
    }
}
